package cn.iocoder.yudao.module.system.dal.dataobject.userretention;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户留存率统计 DO
 *
 * @author 系统开发团队
 */
@TableName("ai_user_retention_stats")
@KeySequence("ai_user_retention_stats_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserRetentionStatsDO extends BaseDO {

    /**
     * 主键ID
     */
    @TableId
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 用户类型：1-管理员用户，2-会员用户
     */
    private Integer userType;

    /**
     * 兑换码使用日期
     */
    private LocalDate codeUsageDate;

    /**
     * 兑换码ID
     */
    private Integer codeId;

    /**
     * 兑换码
     */
    private String code;

    /**
     * 使用记录ID
     */
    private Long usageLogId;

    /**
     * 3日留存：true-留存，false-流失，null-未计算
     */
    @TableField("day_3_retention")
    private Boolean retention3Days;

    /**
     * 7日留存：true-留存，false-流失，null-未计算
     */
    @TableField("day_7_retention")
    private Boolean retention7Days;

    /**
     * 15日留存：true-留存，false-流失，null-未计算
     */
    @TableField("day_15_retention")
    private Boolean retention15Days;

    /**
     * 3日留存登录时间
     */
    @TableField("day_3_login_date")
    private LocalDateTime retention3DaysLoginTime;

    /**
     * 7日留存登录时间
     */
    @TableField("day_7_login_date")
    private LocalDateTime retention7DaysLoginTime;

    /**
     * 15日留存登录时间
     */
    @TableField("day_15_login_date")
    private LocalDateTime retention15DaysLoginTime;

    /**
     * 留存状态：0-计算中，1-已计算，2-计算失败
     */
    private Integer retentionStatus;

    /**
     * 计算时间
     */
    @TableField("calculated_time")
    private LocalDateTime calculatedTime;

    /**
     * 最后登录时间
     */
    @TableField("last_login_date")
    private LocalDateTime lastLoginTime;

    /**
     * 总登录天数（从使用日期开始计算）
     */
    private Integer totalLoginDays;

    /**
     * 连续登录天数
     */
    private Integer consecutiveLoginDays;
}